import 'package:flutter_riverpod/flutter_riverpod.dart';

// **特性2: NotifierProvider - 用于管理更复杂的、拥有业务逻辑的状态**
// 它是管理本地用户操作（如点击收藏、添加到购物车）的现代、推荐方式。
// 它由两部分组成：Notifier（逻辑部分）和它管理的状态（数据部分）。

// 1. 定义 Notifier 类，它必须继承自 Notifier<State>
class FavoritesNotifier extends Notifier<Set<String>> {
  @override
  Set<String> build() {
    // `build` 方法用于创建初始状态。
    // 这里我们用一个 Set<String> 来存储收藏的产品的 ID。
    // Set 可以保证 ID 的唯一性。
    return {};
  }

  // 2. 在 Notifier 中定义业务逻辑方法
  void toggleFavorite(String productId) {
    // `state` 属性是 Notifier 内部管理的状态。
    // 我们不能直接修改它（例如 state.add(...)），因为状态应该是不可变的。
    // 正确的做法是创建一个新的 Set，然后替换旧的 state。
    if (state.contains(productId)) {
      // 如果已收藏，则创建一个不包含该 id 的新 Set
      state = {...state}..remove(productId);
    } else {
      // 如果未收藏，则创建一个包含该 id 的新 Set
      state = {...state, productId};
    }
  }

  bool isFavorite(String productId) {
    return state.contains(productId);
  }
}

// 3. 创建 NotifierProvider
// Riverpod 会自动将 FavoritesNotifier 和它的状态 (Set<String>) 关联起来。
final favoritesProvider = NotifierProvider<FavoritesNotifier, Set<String>>(FavoritesNotifier.new);
